#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H
#include"model/data.h"
#include <QScrollArea>
#include<QLabel>
using model::Message;
class MessageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    MessageShowArea();

    //为了测试代码而引入的一些函数
    void addMessage(bool left, const Message&message);
    void addFrontMessage(bool left,const Message&message);
    void clear();
    void  scrollToEnd();
private:
    QWidget* container;
};
//////////////////////////////////
//创建具体的消息项目
//////////////////////////////////
 class MessageItem:public QWidget
{
      Q_OBJECT
public:
     MessageItem(bool isLeft);
    //工厂模式
 static  MessageItem* makeMessageItem(bool isleft,const Message&message);
     // 添加工厂函数
     static QWidget* makeTextMessageItem(bool isLeft, const QString& text);
     static QWidget* makeImageMessageItem(bool isLeft, const  Message& message);
     static QWidget* makeFileMessageItem(bool isLeft, const Message& message);
     static QWidget* makeSoundMessageItem(bool isLeft, const Message& message);
private:
     bool isleft;

};
//////////////////////////////////
//创建具体文本消息
//////////////////////////////////
class MessageContentLabel:public QWidget
{
     Q_OBJECT
public:
     MessageContentLabel(const QString& text, bool isLeft, model::MessageType messageType, const QString& fileId,
                         const QByteArray& content);
 void paintEvent(QPaintEvent*event);
 private:
     QLabel* label;
     bool isleft;
     model::MessageType messageType;
     QString fileId;
     QByteArray content;
     bool loadContentDone = false;
};

#endif // MESSAGESHOWAREA_H
